package ink.metoo.gude.aspect

import java.util.concurrent.TimeUnit

/**
 * 资源使用次数限制
 */
@Target(AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.RUNTIME)
annotation class RateLimit(

    /**
     * 最大使用次数
     */
    val max: Int,

    val duration: Long = 1L,

    val timeUnit: TimeUnit = TimeUnit.DAYS,

    val key: Key = Key.USER,

    /**
     * 计算资源使用次数方式
     */
    val type: Type = Type.RESPONSE_SUCCESS

) {
    enum class Key {
        USER, IP
    }

    enum class Type {
        /**
         * 请求次数
         */
        ALL,

        /**
         * 请求成功次数
         */
        RESPONSE_SUCCESS
    }
}